package cn.s1995.sloth.bizs.service;

import cn.s1995.sloth.bizs.entity.Cart;
import cn.s1995.sloth.bizs.oo.dto.OrderItemDTO;
import cn.s1995.sloth.bizs.oo.dto.ShopCartDTO;
import cn.s1995.sloth.bizs.oo.dto.ShopCartItemDTO;
import cn.s1995.sloth.bizs.oo.dto.ShopGetCartDTO;
import cn.s1995.sloth.bizs.oo.req.ChangeCartREQ;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface CartService extends IService<Cart> {

    /**
     * 删除购物车缓存
     * @param userId
     */
    void removeShopCartItemsCacheByUserId(Long userId);

    /**
     * 更新满减活动
     * @param userId
     * @param cartIdShopCartParamMap
     */
    void updateCartByShopCartParam(Long userId, Map<Long, ShopGetCartDTO> cartIdShopCartParamMap);

    /**
     * 获取购物车项
     * @param userId    用户id
     * @return
     */
    List<ShopCartItemDTO> getShopCartItems(Long userId);

    List<ShopCartDTO> getShopCarts(List<ShopCartItemDTO> shopCartItems);

    /**
     * 根据购物车id列表删除购物项
     * @param userId 用户id
     * @param cartIds 购物车id列表
     */
    void removeShopCartItemsByCartIds(Long userId, List<Long> cartIds);

    /**
     * 删除所有购物车
     * @param userId
     */
    void removeAllShopCartItems(Long userId);

    /**
     * 更新购物车
     * @param cart
     */
    void updateShopCartItem(Cart cart);

    /**
     * 添加购物车
     * @param req
     * @param userId
     */
    void addShopCartItem(ChangeCartREQ req, Long userId);

    /**
     * 组装获取用户提交的购物车商品项
     * @param orderItem 提交订单时携带的商品信息
     * @param userId 当前用户的用户id
     * @param cartIds 购物车id
     * @return 所有的商品购物项
     */
    List<ShopCartItemDTO> getShopCartItemsByOrderItems(List<Long> cartIds, OrderItemDTO orderItem, Long userId);

    /**
     * 获取购物车失效列表
     * @param userId 用户id
     * @return 失效商品
     */
    List<ShopCartItemDTO> getShopCartExpiryItems(Long userId);

    /**
     * 清除失效的购物项
     * @param userId 用户id
     */
    void cleanExpiryProdList(Long userId);
}
